package cn.com.bluemoon.bd.flink.dim.mgr;
import com.google.common.collect.Maps;

import java.util.Map;

/**
 * 维表管理抽象类
 * @param <I> 查询参数的类型
 * @param <R> 维表信息的类型
 * @author 王仁线
 */
public abstract class AbstractDimMgr<I, R> implements IDimMgr<I, R> {
    protected Byte lock = new Byte((byte) 0);
    protected Map<I, R> infos = Maps.newHashMap();

    /**
     * 全量覆盖更新维表信息
     * @param newInfos
     */
    protected void updateInfos(Map<I, R> newInfos) {
        synchronized (this.lock) {
            this.infos.clear();
            this.infos.putAll(newInfos);
        }
    }

    @Override
    public R get(I input) {
        synchronized (this.lock) {
            return this.infos.get(input);
        }
    }
}
